﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MakeIT.Deo.Negocios;
using System.Data.Entity;
using System.IO;

namespace MakeIT.Deo.Apresentacao
{
    public partial class CadastroUsuario : System.Web.UI.Page
    {
        usuario userVO = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            userVO = (usuario)this.Session["userActive"];
            if (userVO == null)
                Response.Redirect("~/BackOffice.aspx");

            if (!IsPostBack)
            {
                if (userVO.IdUsuario != -999999999)
                {
                    this.btnNovo.Enabled = false;
                    this.btnExcluir.Enabled = false;
                }

                Util.HabilitarCampos(false, this.panelCad);
            }

        }


        /// <summary>
        /// Manipula o evento do botão btnSalvar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnSalvar_Click(object sender, EventArgs e)
        {

            //Declara objetos
            usuario usuarioVO = null;
            UsuarioBO usuarioBO = null;
            bool novoRegistro = false;

            try
            {
                //Cria objeto
                usuarioBO = new UsuarioBO();

                //Verifica se o ID é nulo, se sim = cadastro novo
                if (string.IsNullOrEmpty(this.txtCadId.Text))
                {
                    usuarioVO = new usuario();
                    usuarioVO.Cadastro = DateTime.Now;
                    usuarioVO.CadastradoPor = userVO.User;

                    novoRegistro = true;

                }
                //Recupera dados para serem alterados
                else
                {
                    //Recupera dados
                    usuarioVO = usuarioBO.RecuperaUsuario(Int32.Parse(this.txtCadId.Text));

                }

                usuarioVO.Nome = this.txtCadNome.Text;
                usuarioVO.User = this.txtCadUser.Text;

                usuarioVO.Email = this.txtCadEmail.Text;
                usuarioVO.SMS = this.txtCadSMS.Text;
                usuarioVO.Telefone1 = this.txtCadTel1.Text;
                usuarioVO.Telefone2 = this.txtCadTel2.Text;
                usuarioVO.Telefone3 = this.txtCadTel3.Text;

                usuarioVO.Ativo = this.ckbCadAtivo.Checked;

                if (this.txtCadPass.Text.Trim().Length > 0)
                {
                    if (!this.txtCadPass.Text.Equals(this.txtCadPass2.Text))
                    {
                        Util.ExibeAlert(this, "Senha e confirmação de senha não conferem.");
                        return;
                    }
                    else
                    {
                        usuarioVO.Pass = this.txtCadPass.Text;
                    }
                }

                usuarioVO.Edicao = DateTime.Now;
                usuarioVO.EditadoPor = userVO.User;

                //Chama metodo para salvar ou criar novo registro
                usuarioBO.SalvarUsuario(usuarioVO, novoRegistro);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCad);
                this.ltCadastradoPor.Text = "";
                this.ltEditadoPor.Text = "";
                this.ltDataCadastro.Text = "";
                this.ltDataEdicao.Text = "";

                // Trava botão de edição
                this.btnEditar.Enabled = false;

                // Trava botão de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o botão salvar
                this.btnSalvar.Enabled = false;

                // Habilida o botao novo
                this.btnNovo.Enabled = (userVO.IdUsuario == -999999999);

                Util.HabilitarCampos(false, this.panelCad);

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do botão btnPesquisa
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnPesquisa_Click(object sender, EventArgs e)
        {

            //Declara objetos
            int? idUsuario = null;
            string nome = null;

            try
            {
                if (!string.IsNullOrEmpty(this.txtId.Text))
                {
                    idUsuario = Int32.Parse(this.txtId.Text);
                }

                if (!string.IsNullOrEmpty(this.txtNome.Text))
                {
                    nome = this.txtNome.Text;
                }

                //
                this.grvResultado.DataSource = new UsuarioBO().RecuperaUsuario(idUsuario, nome, null, false);

                //Vincula os dados
                this.grvResultado.DataBind();
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do botão btnCancelar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            this.tabUsuario.ActiveTabIndex = 0;

            // Desabilita os campos para edição
            Util.HabilitarCampos(false, this.panelCad);

            // Destrava botão de edição
            this.btnEditar.Enabled = false;
            if (!string.IsNullOrEmpty(this.txtCadId.Text))
                this.btnEditar.Enabled = (userVO.IdUsuario == -999999999 || userVO.IdUsuario.ToString().Equals(this.txtCadId.Text));

            // Detrava botão de exclusao
            this.btnExcluir.Enabled = false;
            if (!string.IsNullOrEmpty(this.txtCadId.Text))
                this.btnExcluir.Enabled = (userVO.IdUsuario == -999999999);

            // Detrava botão de novo
            this.btnNovo.Enabled = (userVO.IdUsuario == -999999999);

            // Desabilita o botão salvar
            this.btnSalvar.Enabled = false;

        }

        protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            // Declara objetos
            UsuarioBO usuarioBO = null;
            usuario usuarioVO = null;
            int idUsuario = 0;

            try
            {
                // cria objeto
                usuarioBO = new UsuarioBO();

                //
                idUsuario = int.Parse(((ImageButton)sender).CommandArgument);

                //
                usuarioVO = usuarioBO.RecuperaUsuario(idUsuario); ;

                this.txtCadId.Text = idUsuario.ToString();
                this.txtCadNome.Text = usuarioVO.Nome;
                this.txtCadUser.Text = usuarioVO.User;

                this.txtCadEmail.Text = usuarioVO.Email;
                this.txtCadSMS.Text = usuarioVO.SMS;
                this.txtCadTel1.Text = usuarioVO.Telefone1;
                this.txtCadTel2.Text = usuarioVO.Telefone2;
                this.txtCadTel3.Text = usuarioVO.Telefone3;

                this.ckbCadAtivo.Checked = (usuarioVO.Ativo != null ? (bool)usuarioVO.Ativo : false);

                this.ltCadastradoPor.Text = usuarioVO.CadastradoPor;
                this.ltEditadoPor.Text = usuarioVO.EditadoPor;
                this.ltDataCadastro.Text = ((DateTime)usuarioVO.Cadastro).ToString();
                this.ltDataEdicao.Text = (usuarioVO.Edicao==null?"":((DateTime)usuarioVO.Edicao).ToString());

                //
                this.tabUsuario.ActiveTabIndex = 1;

                //
                Util.HabilitarCampos(false, this.panelCad);

                //
                this.btnSalvar.Enabled = false;

                //
                this.btnEditar.Enabled = (userVO.IdUsuario == -999999999 || userVO.IdUsuario == usuarioVO.IdUsuario);

                //
                this.btnExcluir.Enabled = (userVO.IdUsuario == -999999999);

                //
                this.btnNovo.Enabled = (userVO.IdUsuario == -999999999);

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento editar do web form
        /// </summary>
        /// <param name="sender">Objeto disparador de evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnEditar_Click(object sender, EventArgs e)
        {
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelCad);
            this.txtCadUser.Enabled = (userVO.IdUsuario == -999999999);
            this.ckbCadAtivo.Enabled = (userVO.IdUsuario == -999999999);

            // Trava apenas o text box do ID
            this.txtCadId.Enabled = false;

            // Trava botão de edição
            this.btnEditar.Enabled = false;

            // Trava botão de exclusao
            this.btnExcluir.Enabled = false;

            // Trava botão de novo
            this.btnNovo.Enabled = false;

            // Habilita o botão salvar
            this.btnSalvar.Enabled = true;

            this.txtCadNome.Focus();

        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            //Limpa formulario, para a entrada de novo registro
            Util.LimparCampos(this.panelCad);
            this.ltCadastradoPor.Text = "";
            this.ltEditadoPor.Text = "";
            this.ltDataCadastro.Text = "";
            this.ltDataEdicao.Text = "";

            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelCad);

            // Trava apenas o text box do ID
            this.txtCadId.Enabled = false;

            // Trava botão de edição
            this.btnEditar.Enabled = false;

            // Trava botão de exclusao
            this.btnExcluir.Enabled = false;

            // Trava botão de novo
            this.btnNovo.Enabled = false;

            // Habilita o botão salvar
            this.btnSalvar.Enabled = true;

            this.txtCadNome.Focus();

        }

        protected void btnExcluir_Click(object sender, EventArgs e)
        {
            //Declara objetos
            usuario usuarioVO = null;
            UsuarioBO usuarioBO = null;

            try
            {
                //Cria objeto
                usuarioBO = new UsuarioBO();
                usuarioVO = new usuario();

                usuarioVO.IdUsuario = Int32.Parse(this.txtCadId.Text);

                //Chama metodo para salvar ou criar novo registro
                usuarioBO.DeletaUsuario(usuarioVO);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro excluido com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCad);
                this.ltCadastradoPor.Text = "";
                this.ltEditadoPor.Text = "";
                this.ltDataCadastro.Text = "";
                this.ltDataEdicao.Text = "";

                // Trava botão de edição
                this.btnEditar.Enabled = false;

                // Trava botão de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o botão salvar
                this.btnSalvar.Enabled = false;

                // Habilida o botao novo
                this.btnNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }
            
        }
    }
}
